home *** CD-ROM | disk | FTP | other *** search
/ Day Cry / Day Cry CD.bin / oh_towns / taropyon / he386 / ccisrc / gs.c < prev    next >
Text File  |  1994-09-20  |  11KB  |  414 lines

  1. /*************************************************************************
  2. *    GSë╣î╣ɺîΣ
  3. *************************************************************************/
  4.  
  5. #define    MODEL_ID_SC55    (0x45)
  6. #define    MODEL_ID_GS        (0x42)
  7.  
  8. int        GsDeviceID = 16;
  9.  
  10. char    *GsFuncTbl[32] =
  11. {
  12.     "GS_setDeviceNumber" , 
  13.     "sysEx_gs"           , 
  14.     "sysEx_sc55"         , 
  15.  
  16.     "exGs_reset"         , 
  17.     "exGs_masterVolume"  , 
  18.     "exGs_partialReserve", 
  19.     "exGs_reverbMacro"   , 
  20.     "exGs_reverbPara"    , 
  21.     "exGs_chorusMacro"   , 
  22.     "exGs_chorusPara"    , 
  23.  
  24.     "exGs_rxChannel"     , 
  25.     "exGs_assignMode"    , 
  26.     "exGs_rymMap"        , 
  27.  
  28.     "exGs_mod"           , 
  29.     "exGs_bend"          , 
  30.     "exGs_caf"           , 
  31.     "exGs_paf"           , 
  32.     "exGs_cc1number"     , 
  33.     "exGs_cc2number"     , 
  34.     "exGs_cc1control"    , 
  35.     "exGs_cc2control"    , 
  36.  
  37.     "exSC55_msgSet"      , 
  38.     "exSC55_dotSet"      , 
  39.     "SC55_initDotBuffer" , 
  40.     "SC55_setDotBuffer"  , 
  41.     "exSC55_dotBuffer"   , 
  42.  
  43.     NULL
  44. };
  45.  
  46. int        GS_macroInit( char *sqr )
  47. {
  48.     int            i;
  49.  
  50.     GsDeviceID = 17 - 1;
  51.     for ( i = 0; GsFuncTbl[i] != NULL; ++i )
  52.         MMac_extDefine( sqr, GsFuncTbl[i], GsFuncTbl[i], MMAC_ATT_EXT, NULL );
  53.     MMac_extDefine( sqr, "_GS_MACRO_DEFINED", "", MMAC_ATT_NORMAL , NULL );
  54.     return (NORMAL);
  55. }
  56.  
  57. /*************************************************************************
  58. *    âfâoâCâXö╘ìåé╠É▌ÆΦ
  59. *-------------------------------------------------------------------------
  60. *    GS_setDeviceNumber(n)
  61. *    n    üc    1ü`32
  62. *************************************************************************/
  63.  
  64. int        GS_setDeviceNumber( char *sqr, size_t bufSiz, char *buf, int argc, char **argv )
  65. {
  66.     int        n;
  67.  
  68.     if ( argc < 1 )
  69.     {
  70. _ERR:    MM_setErrMsg(sqr,"[GS] device number error!");
  71.         return (ERR);
  72.     }
  73.     n = atoi(argv[0]) - 1;
  74.     if ( n < 1 || n > 32 )
  75.         goto _ERR;
  76.     GsDeviceID = n - 1;
  77.     return (0);
  78. }
  79.  
  80. /*************************************************************************
  81. *    âìü[âëâôâhé╠âGâNâXâNâïü[âVâuâüâbâZü[âWé≡É╢ɼé╖éΘ
  82. *************************************************************************/
  83.  
  84. int        roland_excl( UCHAR *buf, int deviceID, int modelID, UINT adr, size_t siz, UCHAR *dat )
  85. {
  86.     int        i, sum;
  87.  
  88.     buf[0] = 0xF0;
  89.     buf[1] = 0x41;        /* maker ID   */
  90.     buf[2] = deviceID;    /* device ID  */
  91.     buf[3] = modelID;    /* model ID   */
  92.     buf[4] = 0x12;        /* command ID */
  93.     buf[5] = (adr>>16);    buf[6] = (adr>>8);    buf[7] = (adr);
  94.     sum = buf[5] + buf[6] + buf[7];
  95.     for ( i = 0; i < siz; ++i )
  96.     {
  97.         buf[8+i] = dat[i];
  98.         sum += dat[i];
  99.     }
  100.     sum = (0x80 - (sum & 0x7F)) & 0x7F;
  101.     buf[8+siz] = sum;
  102.     buf[9+siz] = 0xF7;
  103.  
  104.     return (siz + 10);
  105. }
  106.  
  107. int        gs_genMML( char *sqr, size_t bufSiz, char *buf, size_t adr, size_t siz, char *dat)
  108. {
  109.     int        ret;
  110.     char    excl[256], tmp[1024];
  111.  
  112.     ret = roland_excl( excl, GsDeviceID, MODEL_ID_GS, adr, siz, dat );
  113.     ret = make_sysEx( tmp, ret, excl );
  114.     if ( ret >= bufSiz )
  115.     {
  116.         MM_setErrMsg(sqr,_OUT_OF_STRING_SPACE);
  117.         return (ERR);
  118.     }
  119.     memcpy( buf, tmp, ret );
  120.     return (ret);
  121. }
  122.  
  123. int        sc55_genMML( char *sqr, size_t bufSiz, char *buf, size_t adr, size_t siz, char *dat)
  124. {
  125.     int        ret;
  126.     char    excl[256], tmp[1024];
  127.  
  128.     ret = roland_excl( excl, GsDeviceID, MODEL_ID_SC55, adr, siz, dat );
  129.     ret = make_sysEx( tmp, ret, excl );
  130.     if ( ret >= bufSiz )
  131.     {
  132.         MM_setErrMsg(sqr,_OUT_OF_STRING_SPACE);
  133.         return (ERR);
  134.     }
  135.     memcpy( buf, tmp, ret );
  136.     return (ret);
  137. }
  138.  
  139.  
  140. /*************************************************************************
  141. *    GSé╠âGâNâXâNâïü[âVâuâüâbâZü[âWMML é≡É╢ɼé╖éΘ
  142. *-------------------------------------------------------------------------
  143. *    (<adr(hex)>,<siz>,<p1>,...<pn>
  144. *************************************************************************/
  145.  
  146. int        sysEx_gs( char *sqr, size_t bufSiz, char *buf, int argc, char **argv )
  147. {
  148.     char    dat[128];
  149.     UINT    adr, siz;
  150.     int        i, ret;
  151.  
  152.     if ( argc < 3 )
  153.     {
  154.         MM_setErrMsg(sqr,"GS system exclusive error!");
  155.         return (ERR);
  156.     }
  157.     sscanf(argv[0],"%x",&adr);
  158.     siz = atoi(argv[1]);
  159.     if ( siz < 1 || argc < 2 + siz )
  160.         return (ERR);
  161.     for ( i = 0; i < siz; ++i )
  162.         dat[i] = atoi(argv[2+i]);
  163.  
  164.     return gs_genMML( sqr, bufSiz, buf, adr, siz, dat );
  165. }
  166.  
  167. /*************************************************************************
  168. *    SC55é╠âGâNâXâNâïü[âVâuâüâbâZü[âWMML é≡É╢ɼé╖éΘ
  169. *-------------------------------------------------------------------------
  170. *    (<adr(hex)>,<siz>,<p1>,...<pn>
  171. *************************************************************************/
  172.  
  173. int        sysEx_sc55( char *sqr, size_t bufSiz, char *buf, int argc, char **argv )
  174. {
  175.     char    dat[128];
  176.     UINT    adr, siz;
  177.     int        i, ret;
  178.  
  179.     if ( argc < 3 )
  180.     {
  181.         MM_setErrMsg(sqr,"SC-55 system exclusive error!");
  182.         return (ERR);
  183.     }
  184.     sscanf(argv[0],"%x",&adr);
  185.     siz = atoi(argv[1]);
  186.     if ( siz < 1 || argc < 2 + siz )
  187.         return (ERR);
  188.     for ( i = 0; i < siz; ++i )
  189.         dat[i] = atoi(argv[2+i]);
  190.  
  191.     return sc55_genMML( sqr, bufSiz, buf, adr, siz, dat );
  192. }
  193.  
  194. /*************************************************************************
  195. *    GSë╣î╣é╠Åëè·ë╗
  196. *************************************************************************/
  197.  
  198. int        exGs_reset( char *sqr, size_t bufSiz, char *buf, int argc, char **argv )
  199. {
  200.     char    dat[4];
  201.     int        ret;
  202.  
  203.     if ( argc != 0 )
  204.     {
  205.         MM_setErrMsg(sqr,"[GS] \"reset\" error!");
  206.         return(ERR);
  207.     }
  208.     dat[0] = 0x00;
  209.     return gs_genMML( sqr, bufSiz, buf, 0x40007F, 1, dat );
  210. }
  211.  
  212.  
  213. /*************************************************************************
  214. *    â}âXâ^ü[â{âèâàü[âÇ
  215. *-------------------------------------------------------------------------
  216. *    (<vol>)
  217. *************************************************************************/
  218.  
  219. int        exGs_masterVolume( char *sqr, size_t bufSiz, char *buf, int argc, char **argv )
  220. {
  221.     char    dat[4];
  222.     int        ret;
  223.  
  224.     if ( argc != 1 )
  225.     {
  226.         MM_setErrMsg(sqr,"[GS] Master volume error!");
  227.         return(ERR);
  228.     }
  229.  
  230.     dat[0] = atoi(argv[0]);
  231.     return gs_genMML( sqr, bufSiz, buf, 0x400004, 1, dat );
  232. }
  233.  
  234. /*************************************************************************
  235. *    âpü[âVâââïâèâUü[âu
  236. *-------------------------------------------------------------------------
  237. *    (<p10>,<p1>,<p2>,<p3>,<p4>,<p5>,<p6>,<p7>,<p8>,<p9>,<p11>,..<p16>)
  238. *************************************************************************/
  239.  
  240. int        exGs_partialReserve( char *sqr, size_t bufSiz, char *buf, int argc, char **argv )
  241. {
  242.     int        i;
  243.     char    dat[32];
  244.     int        ret;
  245.  
  246.     if ( argc != 16 )
  247.     {
  248.         MM_setErrMsg(sqr,"[GS] Partial reserve error!");
  249.         return(ERR);
  250.     }
  251.  
  252.     for ( i = 0; i < 16; ++i )
  253.         dat[i] = atoi(argv[i]);
  254.     return gs_genMML( sqr, bufSiz, buf, 0x400110, 16, dat );
  255. }
  256.  
  257. /*************************************************************************
  258. *    âèâoü[âuâ}âNâì
  259. *-------------------------------------------------------------------------
  260. *    (<typ>)
  261. *************************************************************************/
  262.  
  263. int        exGs_reverbMacro( char *sqr, size_t bufSiz, char *buf, int argc, char **argv )
  264. {
  265.     char    dat[4];
  266.     int        ret;
  267.  
  268.     if ( argc != 1 )
  269.     {
  270.         MM_setErrMsg(sqr,"[GS] Reverb macro error!");
  271.         return(ERR);
  272.     }
  273.  
  274.     dat[0] = atoi(argv[0]);
  275.     return gs_genMML( sqr, bufSiz, buf, 0x400130, 1, dat );
  276. }
  277.  
  278. /*************************************************************************
  279. *    âèâoü[âuâpâëâüü[â^
  280. *-------------------------------------------------------------------------
  281. *    (<charactor>,<pre-lpf>,<level>,<time>,<delay feedback>,<send to chorus>)
  282. *************************************************************************/
  283.  
  284. int        exGs_reverbPara( char *sqr, size_t bufSiz, char *buf, int argc, char **argv )
  285. {
  286.     int        i;
  287.     char    dat[8];
  288.     int        ret;
  289.  
  290.     if ( argc != 6 )
  291.     {
  292.         MM_setErrMsg(sqr,"[GS] Reverb parameter error!");
  293.         return(ERR);
  294.     }
  295.  
  296.     for ( i = 0; i < 6; ++i )
  297.         dat[i] = atoi(argv[i]);
  298.     return gs_genMML( sqr, bufSiz, buf, 0x400131, 6, dat );
  299. }
  300.  
  301. /*************************************************************************
  302. *    âRü[âëâXâ}âNâì
  303. *-------------------------------------------------------------------------
  304. *    (<typ>)
  305. *************************************************************************/
  306.  
  307. int        exGs_chorusMacro( char *sqr, size_t bufSiz, char *buf, int argc, char **argv )
  308. {
  309.     char    da